package controller

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
	"lin6xcom/src/models"
	"lin6xcom/src/utils"
	"net/http"
)

/*
@update:2024/5/28-18:43
@author:Lin
*/

type UserController struct {
}

// 用户登录--------
func (UserController) Login(ctx *gin.Context) {
	//绑定请求参数
	var request struct {
		Username string `json:"username"`
		Password string `json:"password"`
	}
	if err := ctx.ShouldBind(&request); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "参数错误",
		})
		return
	}
	fmt.Println(request)
	//空参数校验
	if request.Username == "" || request.Password == "" {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "参数错误",
		})
		return
	}
	//在数据库查询用户信息
	user := models.User{}
	db := utils.LinkDB()
	if _, err := db.Where("username = ?", request.Username).Get(&user); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "用户名或密码错误",
		})
		return
	}
	//登录验证,密码加密,使用jwt验证
	if request.Username == user.Username && request.Password == user.Password {
		//在登录成功后，将用户信息写入
		token := utils.FJwt{}.CreateToken(user)
		ctx.SetAccepted("token", token)
		ctx.JSON(200, gin.H{
			"code": 200,
			"msg":  "登录成功",
			"data": gin.H{
				"token": token,
			},
		})

	} else {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "用户名或密码错误",
		})
	}
}

// 用户注册--------
func (UserController) Register(ctx *gin.Context) {
	var user models.User
	if err := ctx.ShouldBind(&user); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "参数错误",
		})
		return
	}
	fmt.Println(user)
	db := utils.LinkDB()
	if ok, _ := db.Where("username = ?", user.Username).Get(&user); ok != false {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "用户名已存在",
		})
		return
	}
	user.UserID = uint(uuid.New().ID())
	insert, err := db.Insert(&user)
	if err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "注册失败",
		})
		return
	}
	if insert > 0 {
		ctx.JSON(200, gin.H{
			"code": 200,
			"msg":  "注册成功",
		})
	} else {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "注册失败",
		})
	}
}

// 用户退出--------
func (UserController) Logout(ctx *gin.Context) {
	ctx.JSON(200, gin.H{
		"code": 500,
		"msg":  "此接口已失效，使用jwt进行验证",
	})

}

// 查询用户信息--------
func (UserController) GetUserInfo(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, gin.H{
		"code": 500,
		"msg":  "此接口已失效，使用jwt进行验证",
	})

}

// 查询所有用户信息--------
func (UserController) GetAllUser(ctx *gin.Context) {
	db := utils.LinkDB()
	var user []models.User
	if err := db.Find(&user); err != nil {
		ctx.JSON(200, gin.H{
			"code": 400,
			"msg":  "查询失败",
		})
		return
	}
	ctx.JSON(200, gin.H{
		"code": 200,
		"msg":  "查询成功",
		"data": user,
	})
}

// 更新用户信息--------
func (UserController) UpdateUserInfo(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, gin.H{
		"code": 500,
		"msg":  "暂时没有此功能",
	})
}

// 删除用户--------
func (UserController) DeleteUser(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, gin.H{
		"code": 500,
		"msg":  "暂时没有此功能",
	})
}
